package com.tjetc._1collection._1list;

import java.util.Vector;


@SuppressWarnings("all")
public class _3Vector {
    public static void main(String[] args) {
        /*
            Vector:
            1.底层维护了一个对象数组：protected Object[] elementData;
            2.Vector是线程同步的，即线程安全，Vector类的操作⽅法带有synchronized
            3.在开发中，需要线程同步安全时，考虑使⽤Vector
            结论：
            1.如果使用的是无参构造，则默认的容量为10，满了后按照2倍进行扩容
            2.如果指定大小则按照2倍扩容。

         */

        /*
            ----------------------- 首次创建Vector对象时扩容--------------
            1.创建Vector对象
            initialCapacity: 初始容量
            capacityIncrement： 容量的增量
            public Vector(int initialCapacity, int capacityIncrement) {
                super();
                if (initialCapacity < 0)
                    throw new IllegalArgumentException("Illegal Capacity: "+
                                                       initialCapacity);
                对象数组初始化 初始容量为10
                this.elementData = new Object[initialCapacity];
                this.capacityIncrement = capacityIncrement;
            }

            ----------------------Vector容器满了以后的第一次扩容----------------
            private Object[] grow(int minCapacity) {
                int oldCapacity = elementData.length;
                int newCapacity = ArraysSupport.newLength(oldCapacity,
                        minCapacity - oldCapacity,
                关键扩容的参数：如果你没有指定需要扩容多少 直接2倍
                capacityIncrement > 0 ? capacityIncrement : oldCapacity
                );
                return elementData = Arrays.copyOf(elementData, newCapacity);
            }

            ----------------------指定Vector容器大小-----------------------
            直接扩2倍
            capacityIncrement > 0 ? capacityIncrement : oldCapacity

            ----------------------指定Vector容器大小并指定扩容大小-----------------------
            capacityIncrement就是我们在构造器中指定的扩容大小
             capacityIncrement > 0 ? capacityIncrement : oldCapacity


         */
        // 默认容器大小
        Vector vector = new Vector();
        for (int i = 0; i < 10; i++) {
            vector.add(10);
        }
        vector.add(1);


        // 指定容器大小
        Vector vector1 = new Vector(1);
        vector1.add(1);
        vector1.add(1);

        // 指定容器大小并且指定扩容大小
        Vector vector2 = new Vector(1, 10);
        vector2.add(1);
        vector2.add(1);
    }
}
